package name.huliqing.qfaces.temp;
//package name.huliqing.qfaces.component;
//
//import java.io.IOException;
//import java.util.Map;
//import java.util.logging.Logger;
//import javax.el.MethodExpression;
//import javax.faces.component.UIComponentBase;
//import javax.faces.context.FacesContext;
//import javax.faces.context.ResponseWriter;
//import name.huliqing.qfaces.QFaces;
//import name.huliqing.qfaces.component.Frame.CssPosition;
// 
///**
// * @author huliqing
// *
// */
//public class ____20100630_Helper extends UIComponentBase implements Ajax{
//	private final static Logger logger = Logger.getLogger(____20100630_Helper.class.getName());
//	
//	// ---- 参数类型
//	
//	// 所绑定的用于调用后台帮助信息的method
//	private MethodExpression listener;
//	
//	// true：ajax方式调用，否则直接渲染在页面
//	private Boolean lazy;
//	
//	// 帮助信息，如果绑定了message,那么将不通过listener从后台获取数据,
//	private String message;
//	
//	// 图片按钮的路径(src),客户端组件传递过来的值，如果为null,则使用默认的imageDefault
//	private String image;
//	
//	// 按钮的tip提示信息
//	private String tip;
//	
//	// 内容的style（不含Frame）
//	private String style;
//	
//	// 内容的class样式
//	private String styleClass;
//	
//	// ---- 内部参数
//	
//	// 整个组件的ID
//	private String ID_CLIENT;
//	
//	// “打开”按钮的ID
//	private String ID_BUTTON;
//	
//	// "内容"区域的id(只包含内容)
//	private String ID_CONTENT;
//	
//	private Frame frameRender;
//	
//	@Override
//	public void restoreState(FacesContext fc, Object state) {
//		Object[] obj = (Object[]) state;
//		super.restoreState(fc, obj[0]);
//		this.listener = (MethodExpression) obj[1];
//	}
//	
//	@Override
//	public Object saveState(FacesContext fc) {
//		Object[] obj = new Object[2];
//		obj[0] = super.saveState(fc);
//		obj[1] = this.listener;
//		return obj;
//	}
//	
//	public void setListener(MethodExpression listener) {
//		this.listener = listener;
//	}
//	
//	public void ajax(Map<String, String> params, FacesContext fc) {
//        String listenerExp = params.get("listenerExp");
//        MethodExpression listener = QFaces.createMethodExpression(listenerExp, String.class, new Class[]{});
//        String helpMessage = (String) listener.invoke(fc.getELContext(), new Object[]{});
//        QFaces.getResponse().responseHTML(fc, helpMessage);
//	}
//
//	@Override
//	public void encodeBegin(FacesContext fc) throws IOException {
//		QFaces.getResLoader2().loadJavaScript(this, "Helper.js");
//		
//		this.lazy = QFaces.convertToBoolean(QFaces.getAttribute(this, "lazy", true));
//    	this.image = (String) QFaces.getAttribute(this, "image", QFaces.getResLoader2().makeImageSrc("10.png"));
//    	this.tip = (String) QFaces.getAttribute(this, "tip", "Click me");
//    	this.message = (String) QFaces.getAttribute(this, "message", "");
//    	this.style = (String) QFaces.getAttribute(this, "style", "");
//    	this.styleClass = (String) QFaces.getAttribute(this, "styleClass", "");
//    	this.frameRender = new Frame(this);
//    	this.frameRender.setCssPosition(CssPosition.ABSOLUTE);
//    	
//    	this.ID_CLIENT = this.getClientId(fc);
//    	this.ID_BUTTON = this.ID_CLIENT + ":button";
//    	this.ID_CONTENT = this.ID_CLIENT + ":content";
//    	
//		// ---- 渲染组件
//		ResponseWriter rw = fc.getResponseWriter();
//		rw.startElement("span", this);
//		rw.writeAttribute("id", this.ID_CLIENT, null);
//		rw.writeAttribute("style", "border:0;", null);
//			rw.startElement("img", this);
//			rw.writeAttribute("id", ID_BUTTON, null);
//			rw.writeAttribute("name", ID_BUTTON, null);
//			rw.writeAttribute("style", "vertical-align:middle;", null);
//			rw.writeAttribute("src", this.image, null);
//			rw.writeAttribute("title", tip, null);
//			rw.endElement("img");
//			renderBody(fc);
//		rw.endElement("span");
//		
//		// ---- 初始化
//		StringBuilder sb = new StringBuilder("Q.F.UIHelper.init(")
//		.append(" \"" + this.ID_CLIENT + "\"")
//		.append(",\"" + this.getClass().getName() + "\"")
//		.append(",\"" + (this.listener != null ? this.listener.getExpressionString() : "") + "\"")
//		.append(",\"" + this.lazy.toString() + "\"")
//		.append(",\"" + this.ID_BUTTON + "\"")
//		.append(",\"" + this.frameRender.getFrameId() + "\"")
//		.append(",\"" + this.ID_CONTENT + "\"")
//		.append(");");
//		
//		QFaces.getResLoader2().loadJavaScriptInit(this, sb.toString());
//	}
//	
//	public void renderBody(FacesContext fc) throws IOException {
//		frameRender.encodeBegin(fc.getResponseWriter());
//		
//		ResponseWriter rw = fc.getResponseWriter();
//		// 如果直接绑定了message,则不进行listener绑定
//		String helpMessage = "";
//		if (message != null && message.length() > 0) {
//			helpMessage = message;
//		} else {
//			if (this.listener == null) {
//				logger.warning("You must binding at least one attribute \"message\" or \"listener\" ");				
//			} else {
//				if (!lazy) {
//					helpMessage = (String) ____20100630_Helper.this.listener.invoke(fc.getELContext(), new Object[]{});
//				}				
//			}
//		}
//		rw.startElement("div", this);
//		rw.writeAttribute("id", ID_CONTENT, null);
//		rw.writeAttribute("name", ID_CONTENT, null);
//		rw.writeAttribute("class", this.styleClass, null);
//		rw.writeAttribute("style", this.style, null);
//    	rw.writeText(helpMessage, null);
//		rw.endElement("div");
//		
//		frameRender.encodeEnd(fc.getResponseWriter());
//	}
//
//	@Override
//	public String getFamily() {
//		return null;
//	}
//
//}
